# @Version : 1.0
# @Author  : 刘宇
# @File    : homework.py
# @Time    : 2025/10/11 22:12

import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA

# 量子光学实验数据生成
np.random.seed(42)

# 实验参数
n_samples = 300   # 样本数量
n_modes = 50      # 模式数量 特征维度：50
n_photon_avg = 5  # 平均每个样本的光子数

# 生成高维数据（模拟多模式光子数分布）
# 泊松分布
# 用来模拟光子数
X = np.random.poisson(lam=n_photon_avg, size=(n_samples, n_modes))

# 模拟不同实验条件下的数据集）
X[:100, :25]  += 3   # 第一类实验条件
X[100:200, 25:] += 3 # 第二类实验条件
X[200:, 10:40] += 3  # 第三类实验条件

# 标签为了区分的颜色
y = np.zeros(n_samples)
y[100:200] = 1
y[200:] = 2

print("原始数据形状:", X.shape)

# PCA降维到2维
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)

print("降维后数据形状:", X_pca.shape)
print("解释方差比例:", pca.explained_variance_ratio_)
print("累计解释方差:", np.sum(pca.explained_variance_ratio_))


plt.figure(figsize=(8, 6))
scatter = plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='viridis', alpha=0.7)
plt.colorbar(scatter, label='实验条件类别')
plt.title("量子光学数据 PCA 降维结果 (2D)")
plt.xlabel("主成分1")
plt.ylabel("主成分2")
plt.grid(True)
plt.show()